package com.nenude.corejava.ch6;

/**
 * <pre>
 * 1、把客观事物进行分门别类，设计一个class类与之对应
 *
 * 
 * </pre>
 * 
 * @author admin
 *
 */
public class Computer {
	// 主机：机箱、主板、cpu、内存条、显卡、硬盘
	// 显示器：类型、尺寸、分辨率、品牌
	// 键盘：布局、键位数、材质
	// 鼠标
	// 外部电源

	// has-a关系是一种：组合关系-依赖关系，强依赖关系(计算机 依赖于 主机)

	// 实例变量，通常也称为属性
	// 封装 -- 就是隐藏类内部的实现，并对外提供访问的接口
	// 封装就是把属性私有化，使用private 修饰属性；并提供公有的方法getter 和 setter / 或者构造方法  访问私有的属性
   //公有的方法：不仅指代public 还可以是default 和 protect
	
	
	private MainMachine machine;// 主机
	private Display display; // 显示器类

	private KeyBoard keyBoard;// 键盘类
	private Mouse mouse;// 鼠标类

	
	/** 构造方法
	 * 1、方法名和类名相同（大小写也相同）；
	 * 2、没有返回值类型（不需要写 void）；
	 * 3、当使用new 关键词实例化对象时需要调用构造方法；（用于分配内存）
	 * 4、构造方法一般用于实例化对象时，申请内存使用，或实例化对象时，初始化数据；
	 * 5、java 编译器会默认给java 类提供一个空参的构造方法（当没有编写空参构造方法时，会自动生成一个方法）；
	 *    如果显示编写了空参构造方法，则编译器不再提供空参构造方法；
	 * 6、构造方法也可以进行方法的重载；  
	 */

	public Computer () {//空参
		
		//初始化的概念：其实是第一次给变量进行赋值（已经分配内存了，不为null）
		machine=new MainMachine();
		keyBoard=new KeyBoard();
		display=new Display();
		mouse=new Mouse();
	}
	
	//全参构造方法（构造器）
	public Computer(MainMachine machine, Display display, KeyBoard keyBoard,
			Mouse mouse) {
		super();
		//当属性与局部变量名，名称相同时会产生名称冲突
		//可以使用this 关键词表示类的属性
		this.machine = machine;
		this.display = display;
		this.keyBoard = keyBoard;
		this.mouse = mouse;
	}

	

	
	//getter 和 setter 方法
	public MainMachine getMachine() {
		return machine;
	}

	
	public void setMachine(MainMachine machine) {
		this.machine = machine;
	}

	public Display getDisplay() {
		return display;
	}

	public void setDisplay(Display display) {
		this.display = display;
	}

	public KeyBoard getKeyBoard() {
		return keyBoard;
	}

	public void setKeyBoard(KeyBoard keyBoard) {
		this.keyBoard = keyBoard;
	}

	public Mouse getMouse() {
		return mouse;
	}

	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}

	// 计算
	public void calculate() {
		System.out.println("执行计算");
	}

}
